﻿namespace HttpHelper
{
    /// <summary>
    ///
    /// </summary>
    public class HeaderKey
    {
        /// <summary>
        ///客户端可识别的内容类型列表，用于指定客户端接收那些类型的信息
        /// </summary>
        public const string Accept = "Accept";

        /// <summary>
        ///客户端可识别的数据编码
        /// </summary>
        public const string AcceptEncoding = "Accept-Encoding";

        /// <summary>
        ///表示浏览器所支持的语言类型
        /// </summary>
        public const string AcceptLanguage = "Accept-Language";

        /// <summary>
        ///指定请求和响应遵循的缓存机制
        /// </summary>
        public const string CacheControl = "Cache-Control";

        /// <summary>
        ///HTTP_CLIENT_IP 是代理服务器发送的HTTP头，HTTP_CLIENT_IP确实存在于http请求的header里。
        ///HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”，则返回none值。
        /// </summary>
        public const string CLIENT_IP = "CLIENT_IP";

        /// <summary>
        ///实体头用于向接收方指示实体的介质类型，指定HEAD方法送到接收方的实体介质类型
        /// </summary>
        public const string ContentType = "Content-Type";

        /// <summary>
        ///COOKIE是大家都非常熟悉的了，通过它可以在客户端保存用户状态，即使用户关闭浏览器也能继续保存
        /// </summary>
        public const string Cookie = "Cookie";

        /// <summary>
        ///用来说明请求从哪里发起的，包括，且仅仅包括协议和域名。
        /// </summary>
        public const string Origin = "Origin";

        /// <summary>
        ///该页面的来源URL
        /// </summary>
        public const string Referer = "Referer";

        /// <summary>
        ///表示发出请求的远程主机的 IP 地址，remote_addr代表客户端的IP，但它的值不是由客户端提供的，而是服务端根据客户端的ip指定的.
        /// </summary>
        public const string REMOTE_ADDR = "REMOTE_ADDR";

        /// <summary>
        ///设置和页面关联的Cookie
        /// </summary>
        public const string SetCookie = "Set-Cookie";

        /// <summary>
        ///发送请求的浏览器类型、操作系统等信息
        /// </summary>
        public const string UserAgent = "User-Agent";

        /// <summary>
        ///当客户端请求到达第一个代理服务器时，该服务器会在自己发出的请求里面
        ///添加 Via 头部，并填上自己的相关信息，当下一个代理服务器 收到第一个代理
        ///服务器的请求时，会在自己发出的请求里面复制前一个代理服务器的请求的Via
        ///头部，并把自己的相关信息加到后面， 以此类推，当 OCS 收到最后一个代理服
        ///务器的请求时，检查 Via 头部，就知道该请求所经过的路由。
        /// </summary>
        public const string VIA = "VIA";

        /// <summary>
        ///X-Forwarded-For 是一个扩展头。HTTP/1.1（RFC 2616）协议并没有对它的定义，它最开始是由 Squid 这个缓存代理软件引入，
        ///用来表示 HTTP 请求端真实 IP，现在已经成为事实上的标准，被各大 HTTP 代理、负载均衡等转发服务广泛使用，并被写入
        ///RFC 7239（Forwarded HTTP Extension）标准之中.
        /// </summary>
        public const string XForwardedFor = "X-Forwarded-For";

        /// <summary>
        ///HTTP 规范里没有这个。一些 HTTP 服务器约定俗成用这个字段来定义请求的类型，例如当前请求是请求了一个页面（普通请求）
        ///还是请求了一段逻辑或数据（AJAX 请求，也就是 @Grewer 说的异步请求）。部分服务端依赖这个标识来明确需要执行的后端逻辑。
        /// </summary>
        public const string Xrequestedwith = "X-Requested-With";
    }

    /// <summary>
    ///
    /// </summary>
    public class HeaderValue
    {
        /// <summary>
        ///客户端可识别的内容类型列表，用于指定客户端接收那些类型的信息
        /// </summary>
        public const string Accept = "*/*";

        /// <summary>
        ///客户端可识别的数据编码
        /// </summary>
        public const string AcceptEncoding = "utf-8";

        /// <summary>
        ///表示浏览器所支持的语言类型
        /// </summary>
        public const string AcceptLanguage = "zh-cn";

        /// <summary>
        ///指定请求和响应遵循的缓存机制
        /// </summary>
        public const string CacheControl = "no-cache";

        /// <summary>
        ///实体头用于向接收方指示实体的介质类型，指定HEAD方法送到接收方的实体介质类型
        /// </summary>
        public const string ContentType = "application/x-www-form-urlencoded";

        /// <summary>
        ///发送请求的浏览器类型、操作系统等信息
        /// </summary>
        public const string UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2)";

        /// <summary>
        ///一个可以向服务器发送异步请求和解析服务器响应的API。
        /// </summary>
        public const string XMLHttpRequest = "XMLHttpRequest";
    }
}